package icasue.net.protocol.carfun.commands;

/**
 * @Author: Qiao Hang
 * @CreateDate: 2021/3/23 上午10:18
 * @UpdateDate:
 * @Description: EventCommand 事件Command，【服务端处理来自客户端的MDCommand，生成通知其他客户端的EventCommand】
 * 该类EventCommand载入消息池，被Channel线程统一管理，由Channel线程同一分发给其余注册的客户端.
 *      服务端扩展CarFunProtocol需要：
 *      前提条件：MDCommand相关能力的注册
 *      1.扩充一个或多个 EventCommand ( 注册的MDCommanderDriver 在执行某用户扩充的MDCommand时会产生通知其余客户端的用户事件:EventCommand )
 *      2.注册一个或多个 EventCommandDriver，用于处理EventCommand的业务逻辑 (例如通知的数据格式等)
 *      3.注册一个或多个 EventCommandDriverProvider, 管理上一步注册的 EventCommandDriver
 *      4.将上一步注册的 EventCommandDriverProvider 装载入 CommandDriverManager
 *
 *      notice: MDCommand 与 EventCommand 的连接纽带在 MDCommanderDriver的处理逻辑中，MDCommanderDriver处理完客户端的change行为，
 *              发送EventCommand 被channel线程处理，处理会使用 支持EventCommand解析的 EventCommandDriver.
 */
public interface EventCommand extends Command{

    enum EventChannel implements EventCommand {
        //客户端绑定和解绑channel.
        EVENT_CHANNEL_JOIN,
        EVENT_CHANNEL_QUIT;
        //信息上报..
        @Override
        public String getCommand() {
            return this.name();
        }
    }
}
